/*
 * AlterarEmailManagedBean.java
 * Versão: 1.0
 * Data de Criação : 19/08/2011
 * Copyright (c) 2008-2011 Universidade Estadual de
 * Londrina - UEL.
 * Rodovia Celso Garcia Cid, Cidade Universitária,
 * Londrina, Paraná
 * Brasil
 * Todos os direitos reservados.
 *
 * Este software é de informação confidenciais de
 * propriedade da UEL Univesidade Estadual de Londrina.
 * ("Informações Confidenciais "). Você não poderá
 * compartilhar estas informações por ser de carater
 * confidencial e usará somente em acordo com os termos de
 * licençada UEL
 */
package br.uel.ati.grad.bean;

import br.uel.ati.entity.grad.Usuario;
import br.uel.ati.facade.grad.UsuarioFacadeLocal;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import lombok.Data;

/**
 * Esta classe permite a alteração do e-mail corrente do usuário e sua validação
 * comparando o valor digitado na página web com o armazenado no banco de dados.
 *
 * @author Humberto Ferreira da Luz Junior
 * @version 1.0
 */
@ManagedBean
@RequestScoped
@Data
public class AlterarEmailManagedBean {
    /**
     * Interface EJB utilizada para acessar o banco de dados.
     */
    @EJB
    private UsuarioFacadeLocal usuarioFacade;
    /**
     * E-mail atual digitado pelo usuário no formulário.
     */
    private String emailAtual;
    /**
     * Novo e-mail digitado pelo usuário no formulário.
     */
    private String novoEmail;
    /**
     * Armazena as informações do usuário logado que está executando a ação.
     */
    private Usuario loggedUser;

    /**
     * Altera o e-mail do usuário.
     *
     * @return String que redireciona para a página index.xhtml de acordo com o faces.config.
     */
    public String alterarEmail() {
        loggedUser.setSenha(novoEmail);
        usuarioFacade.edit(loggedUser);
        return "home";
    }

    /**
     * Realiza a validação do e-mail atual digitado pelo usuário na página web.
     *
     * @return String que redireciona para a página index.xhtml de acordo com o faces.config
     * @throws ValidatorException indica que o e-mail digitado pelo usuário está incorreto, 
     * pois não é igual ao armazenado no BD.
     */
    public void validarEmailAtual(FacesContext context, UIComponent component, Object value) {
        String email = (String) value;
        String nome = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
        loggedUser = usuarioFacade.find(nome);
        if (!loggedUser.getEmail().equals(value)) {
            FacesMessage message = new FacesMessage("E-mail incorreto");
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(message);
        }
    }

    /**
     * Limpa as variáveis do managed bean.
     *
     * @return String que redireciona para a página index.xhtml de acordo com o faces.config.
     */
    public String limpar() {
        emailAtual = novoEmail = new String();
        loggedUser = new Usuario();
        return "/index.xhtml";
    }
}